[MSSQL] 取得特定年、月、星期的所有日期


Posted by mike-hsieh on 2023-10-18

系統開發需要這個邏輯,簡單紀錄一下:

思路: 透過遞迴取得一個月份的所有日期,再使用星期去篩選。
範例: 年份為2023,月份為11月,要取得周一、周四的日期。

DECLARE @Year INT = 2023;   --  年份。 2023年
DECLARE @Month INT = 11;    --  月份。 11月

WITH AllDays AS (
    SELECT DATEFROMPARTS(@Year, @Month, 1) AS [Date]
    UNION ALL
    SELECT DATEADD(DAY, 1, [Date])
    FROM AllDays
    WHERE DATEADD(DAY, 1, [Date]) <= EOMONTH(DATEFROMPARTS(@Year, @Month, 1))
)

SELECT [Date]
FROM AllDays
WHERE DATEPART(WEEKDAY, [Date]) IN (2, 5) -- MSSQL的星期代號 => Sun: 1, Mon: 2, Tue: 3, Wed: 4, Thu: 5, Fri: 6, Sat: 7
ORDER BY [Date]
OPTION (MAXRECURSION 31);   --  一個月最多31天,限制遞迴次數31


#MSSQL #date-of-weekday-in-a-month







Related Posts

Day02 典型統計應用在社群媒體分析(Classical statistics applied to social data) part 2

Day02 典型統計應用在社群媒體分析(Classical statistics applied to social data) part 2

F2E合作社|按鈕群組元件|Bootstrap 5網頁框架開發入門

F2E合作社|按鈕群組元件|Bootstrap 5網頁框架開發入門

從 JavaScript 踏入程式語言

從 JavaScript 踏入程式語言


Comments